/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package es.us.mwm.ejb;

import es.us.mwm.entities.Users;
import java.util.List;
import javax.ejb.Local;

/**
 * Interfaz local para la clase UserEJB
 *
 * @author y0rg
 */
@Local
public interface UserEJBLocal {

    /**
     * Metodo para obtener un rango de resultado de busqueda
     *
     * @param jpqlStmt
     * @param firstResult
     * @param maxResults
     * @return
     */
    Object queryByRange(String jpqlStmt, int firstResult, int maxResults);

    /**
     * Metodo para persistir una entidad
     *
     * @param <T> Tipo de entidad
     * @param entity entidad
     * @return entidad persistida
     */
    <T> T persistEntity(T entity);

    /**
     * Metodo para editar/modificar una entidad, si no existe, la crea
     *
     * @param <T> Tipo de entidad
     * @param entity entidad
     * @return entidad editada
     */
    <T> T mergeEntity(T entity);

    /**
     * <code>select o from Users o</code> Metodo para consultar todos los usuario de la capa de persistencia
     *
     * @return lista de usuarios
     */
    List<Users> getUsersFindAll();

    /**
     * <code>select o from Users o WHERE o.user = :user AND o.password = :pass AND o.active='Y'</code> Metodo para comprobar
     * el login, busca el usuario con usuario y password
     *
     * @param user usuario
     * @param pass password
     * @return lista usuario encontrado
     */
    List<Users> getUsersLogIn(String user, String pass);

    /**
     * Metodo para persistir un usuario
     *
     * @param user usuario
     * @return usuario persisitido
     */
    Users persistUsers(Users user);

    /**
     * Metodo para editar/modificar un usuario, si no existe, lo crea
     *
     * @param user usuario
     * @return usuario editado
     */
    Users mergeUsers(Users user);

    /**
     * Metodo para comprobar si el login ha sido correcto
     *
     * @param user usuario
     * @param pass pass
     * @return cadena de texto con el tipo de usuario o error
     */
    String checkLogin(String user, String pass);

    /**
     * Metodo para editar/modificar un usuario
     *
     * @param user usuario
     */
    void refreshUsers(Users user);

    /**
     * Metodo para buscar un usuario por su nombre
     *
     * @param name nombre
     * @return usuario encontrado
     */
    Users getUser(String name);
}
